GPIO控制

在ubuntu上已经安装了vivado和vitis的环境后,就可以通过ubuntu系统上的vitis开发应用程序。和在windows上一样,需要先创建平台工程,再创建相应的应用工程。

建立vitis工程

建立平台工程

image-20250709112858375

在我们创建petalinux工程时已经将xsa文件导入到了ubuntu里,此时选择此xsa文件,并将系统选择为Linux系统:点击finish

image-20250709112955359

建立应用工程

创建应用工程,本次我们只创建一个应用工程,将不同的外设测试分模块进行,首先创建一个应用工程:

image-20250709113105988

image-20250709113135071

image-20250709113153767

image-20250710100458596

image-20250710100546445

image-20250709113326894

点击finish,应用工程建立完成。

 

目前的GPIO配置中使能了2个MIO LED/2个EMIO LED,2个MIO KEY/2个EMIO KEY,以及一个蜂鸣器。

通过sysfs控制GPIO

在Linux系统中,可以通过sysfs接口方便地控制GPIO。下面介绍如何在Zynq-7020平台上使用sysfs控制GPIO。

确认GPIO编号

Zynq-7020的GPIO分为:

首先需要确定你要控制的GPIO在Linux系统中的编号。/sys/class/gpio下的gpiochips编号对应第一个GPIO及MIO0的编号,一般是906。

image-20250709114610103

GPIO编号计算公式:

例如:

导出GPIO

假设要控制EMIO0,则需要先将该GPIO导出

设置GPIO方向

设置GPIO为输出或输入模式:

读写GPIO值

输出模式(控制LED等):

输入模式(读取按键等):

取消导出GPIO

使用完毕后,可以取消导出:

通过程序的方式控制

添加代码到vitis工程

右击"src"->"new"->"Foder"建立GPIO,TEST文件夹:

image-20250710120437525

image-20250710120520283

右击"GPIO"->"new"->"File"建立对应的.c/.h文件;右击"TEST"->"new"->"File"建立对应的.c文件;右击"src"->"new"->"File"建立main.c/main.h。

image-20250710120556640

添加相应的代码后,最后的工程结构如下:

image-20250710120833354

编译调试

连接IP地址

打开vitis,点击如下图标:

image-20250710141903115

选择Linux Agent为default,并双击以配置该Agent:

image-20250710142023761

弹出的界面中,Host的地方填入开发板的IP地址,端口保持默认值,不用改:

image-20250710142109417

填完成后可以点击Test Connection以测试连接成功还是失败,出现下面内容则说明已经连接成功:

image-20250710142239180

点击ok退出即可。

修改程序下载路径

因为这块默认下载路径是SD卡的第一个分区,而默认第一个分区用来存放内核镜像、BOOT.BIN等信息。所以在/home/root下新建一个文件夹app,将编译生成的.elf文件下载到该文件夹下。

image-20250714121606681

image-20250714121125768

调试

可以直接点击左上方的此图标进行代码的编译,也可以像之前一样点击“build project"进行编译:

image-20250710133350018

如果出现此类错误

image-20250710135004129

对应的解决办法是将头文件的路径添加到搜索路径中。

右击工程,选择"C/C++ Build Settings":

image-20250710134241403

image-20250710134400330

image-20250710135133836

"Add"后:

image-20250710135148364

加完之后页面:

image-20250710135654166

此时就可以编译成功了。

Debug时,vitis会将代码下载到开发板的/home/root/app下运行。这时就可以通过vitis进行单步调试或断点调试。

核心代码